/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ifpb.pp.rh.entity;

import ifpb.pp.rh.bean.Endereco;
import ifpb.pp.rh.constant.EstadoCivil;
import ifpb.pp.rh.constant.Estados;
import ifpb.pp.rh.constant.Sexo;
import ifpb.pp.rh.constant.TipoSanguineo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Gabriella
 */
//@NamedQueries({@NamedQuery(name="lista.tel.servidores",query="SELECT s.nome, s.tipo, s.numero FROM Servidor s ORDER BY s.nome"),
//@NamedQuery(name="documentacao.servidor",query="SELECT s.nome, s.documentacao.cpf, s.documentacao.rg, s.documentacao.pis_pasep FROM Servidor s ORDER BY s.nome"),
//@NamedQuery(name="servidores.tipo",query="SELECT s.tipo, s.nome, s.matricula FROM Servidores WHERE c.nome=?1 ORDER BY s.tipo, s.nome,s.matricula")})
@NamedQueries({@NamedQuery(name="servidor.nome",query="SELECT s FROM Servidor s WHERE s.nome = ?1")})
@Entity

public class Servidor implements Serializable{

    private Integer id;
    private String nome;
    private String matricula;
    private Sexo sexo;//ENUM
    private Date nasc;
    private EstadoCivil estadoCivil;
    private String nacionalidade;
    private String naturalidade;
    private Estados uf;//ENUM
    private String mae;
    private String pai;
    private TipoSanguineo tipoSanguineo; //ENUM
    private String tipo;//fazer uma
    private Documentacao documentacao;
    private DadosProficionais dproficionais;
    private Endereco endereco;
    private String email;
    private String telefone;

    public Servidor() {       
    }

    public Servidor(String nome, String matricula, Sexo sexo, Date nasc, EstadoCivil estadoCivil, String nacionalidade, String naturalidade, Estados uf, String mae, String pai,TipoSanguineo tipoSanguineo, Documentacao documentacao, DadosProficionais dproficionais, Endereco endereco, String email, String telefone) {
        this.nome = nome;
        this.matricula = matricula;
        this.sexo = sexo;
        this.nasc = nasc;
        this.estadoCivil = estadoCivil;
        this.nacionalidade = nacionalidade;
        this.naturalidade = naturalidade;
        this.uf = uf;
        this.mae = mae;
        this.pai = pai;
        this.tipoSanguineo = tipoSanguineo;
        this.documentacao = documentacao;
        this.dproficionais = dproficionais;
        this.endereco = endereco;
        this.email = email;
        this.telefone = telefone;
    }



    @Id
    @GeneratedValue
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Enumerated(EnumType.STRING)
    public EstadoCivil getEstadoCivil() {
        return estadoCivil;
    }


    public void setEstadoCivil(EstadoCivil estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getMae() {
        return mae;
    }

    public void setMae(String mae) {
        this.mae = mae;
    }

    @Column(unique=true)
    public String getMatricula() {
        return matricula;
    }

    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    public String getNacionalidade() {
        return nacionalidade;
    }

    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    @Temporal(TemporalType.DATE)
    public Date getNasc() {
        return nasc;
    }

    public void setNasc(Date nasc) {
        this.nasc = nasc;
    }

    public String getNaturalidade() {
        return naturalidade;
    }

    public void setNaturalidade(String naturalidade) {
        this.naturalidade = naturalidade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getPai() {
        return pai;
    }

    public void setPai(String pai) {
        this.pai = pai;
    }

    @Enumerated(EnumType.STRING)
    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

       public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    @Enumerated(EnumType.STRING)
    public TipoSanguineo getTipoSanguineo() {
        return tipoSanguineo;
    }

    public void setTipoSanguineo(TipoSanguineo tipoSanguineo) {
        this.tipoSanguineo = tipoSanguineo;
    }

    @Enumerated(EnumType.STRING)
    public Estados getUf() {
        return uf;
    }

    public void setUf(Estados uf) {
        this.uf = uf;
    }

    @OneToOne(cascade={CascadeType.ALL})
    public Documentacao getDocumentacao() {
        return documentacao;
    }

    public void setDocumentacao(Documentacao documentacao) {
        this.documentacao = documentacao;
    }

    @OneToOne(cascade={CascadeType.PERSIST,CascadeType.REFRESH})
    public DadosProficionais getDproficionais() {
        return dproficionais;
    }

    public void setDproficionais(DadosProficionais dproficionais) {
        this.dproficionais = dproficionais;
    }

    @Embedded
    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

}
